package persistencia.cliente;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import negocio.cv.Condicion;
import negocio.cv.Institucion;
import negocio.cv.Tarea;
import negocio.cv.TipoEstudio;
import negocio.cv.Titulo;
import persistencia.DACBase;
import persistencia.SingletonDACBase;

public class DACTipoEstudio extends DACBase {
	
	private TipoEstudio tipoDeEstudio;
	private List<TipoEstudio> tiposDeEstudio;	
	private CallableStatement clstm;
	private ResultSet rs;
	
	
	public DACTipoEstudio(DACBase dacBase){
		super(dacBase);
	}
	/**
	 * este metodo materializa los tipos de estudio y al mismo tiempo 
	 * los mtitulos e instituciones que le pertenecen
	 * @return lista de tipos de estudio
	 */
	public List<TipoEstudio> consultarTiposDeEstudio(){
		tiposDeEstudio = new ArrayList<TipoEstudio>();
		try{
			clstm = getConn().prepareCall("{call tipoestudioConsultarTodos()}"); 
			clstm.execute();
			rs = clstm.getResultSet();			
			while (rs.next()) {
				
				tipoDeEstudio = new TipoEstudio();
				tipoDeEstudio.setIdTipoEstudio(rs.getInt("idtipoestudio"));
				tipoDeEstudio.setNombre(rs.getString("nombre"));
				tipoDeEstudio.setDescripcion("descripcion");				
				
				DACTitulo dacTitulo = new DACTitulo(SingletonDACBase.tomarDACBase());
				tipoDeEstudio.setTitulos(dacTitulo.consultarTitulos(tipoDeEstudio.getIdTipoEstudio()));
				
				DACInstitucion dacIstitucion = new DACInstitucion(SingletonDACBase.tomarDACBase());				
				tipoDeEstudio.setInstituciones(dacIstitucion.consultarInstituciones( 
						tipoDeEstudio.getIdTipoEstudio()));
				
				//finalemente lo agragamos a la lista								 
				tiposDeEstudio.add(tipoDeEstudio);
            }			           
			
			
			
			rs.close();
			rs = null;
			
			clstm.close();
            clstm = null;

            
		}    
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		    System.out.println("Error en metodo consultarTiposDeEstudio()_TipoEstudio");
			}
		
	    return tiposDeEstudio;		
	}	
	
	public TipoEstudio consultarTipoDeEstudio(int id){
		try{
			clstm = getConn().prepareCall("{call tipoestudioConsultar(?)}"); 
			clstm.setInt("id", id);
			clstm.execute();
			rs = clstm.getResultSet();			
			if (rs.next()) {
				
				tipoDeEstudio = new TipoEstudio();
				tipoDeEstudio.setIdTipoEstudio(rs.getInt("idtipoestudio"));
				tipoDeEstudio.setNombre(rs.getString("nombre"));
				tipoDeEstudio.setDescripcion("descripcion");				
				
				DACTitulo dacTitulo = new DACTitulo(SingletonDACBase.tomarDACBase());
				tipoDeEstudio.setTitulos(dacTitulo.consultarTitulos(tipoDeEstudio.getIdTipoEstudio()));
				
				DACInstitucion dacIstitucion = new DACInstitucion(SingletonDACBase.tomarDACBase());				
				tipoDeEstudio.setInstituciones(dacIstitucion.consultarInstituciones( 
				tipoDeEstudio.getIdTipoEstudio()));
				
            }			           		
			
			rs.close();
			rs = null;
			
			clstm.close();
            clstm = null;
            
   
            
		}    
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		    System.out.println("Error en metodo consultarTipoDeEstudio()_DacTipoEstudio");
		}
		
	    return tipoDeEstudio;	
	}
}
